﻿#pragma once

class CircleBuffer
{
public:
    CircleBuffer();
    ~CircleBuffer();

private:
    char* buf;  // 指向环形缓冲区的指针
    int head;   // 缓冲区头部索引
    int rear;   // 缓冲区尾部索引
    int maxBuf; // 缓冲区的最大值(根据业务不同，设置合适的值)
    bool isMutable; // 是否可以自动扩大
                
    // 把接收到的数据拷贝到缓冲区中
    inline void copyData(char* data, int len); 

public:
    // 数据放入环形缓冲区中   
    void pushData(char* data, int len); 

    // 缓冲区中数据的长度 
    int dataLength();

    // 获取数据
    void data(char* result, int len);

    // 重置缓冲区
    void resetBuffer(int size, bool inMutable = false);

    // 缓冲区是否为空
    inline bool empty();

    // 移动头部索引的位置
    inline void moveHead(int len);
};